Introdução à Programação

Aula 14 - Exceptions

Exceptions

  • Eventos que acontecem durante a execução de um programa e interrompem o fluxo normal do script
  • Exceções em Python sinalizam erros ou condições não esperadas
  • Quando um erro ocorre no programa, o Python:
  1. Cria um objeto de exceção
  2. Se o objeto não é tratado, interrompe-se o programa
  3. Exibe mensagem de erro

Por que tratar exceções?

  • Objetivo: Garantir que o programa seja robusto e previsível.
  • Motivações:
    • Evitar que erros inesperados interrompam a execução do código.
    • Facilitar a depuração com mensagens de erro claras.
    • Melhorar a manutenção e legibilidade do código.
# Exemplo: Demonstração do porquê tratar exceções
valor = -5

if valor < 0:
    # Levanta uma exceção para impedir a continuação do código com valor inválido
    raise ValueError("Erro: O valor não pode ser negativo.")
ValueError: Erro: O valor não pode ser negativo.

ValueError

  • Exceção lançada quando uma função recebe um argumento com o valor inapropriado
## Tentando converter character não númerico em integer
int('dez')
ValueError: invalid literal for int() with base 10: 'dez'

TypeError

  • Exceção lançada quando uma operação ou função é aplicada a um objeto de tipo inadequado
## Tentando somar um elemento str e um elemento int sem converter-los
5 + '3'
TypeError: unsupported operand type(s) for +: 'int' and 'str'

IndexError

  • Exceção lançada quando uma operação ou função é aplicada a um objeto de tipo inadequado
## Tentando indexar um elemento não existente na lista
lista = [1,2,3]
lista[10]
list index out of range

Tratando exceções I

  • Para tratar exceções utilizamos os seguintes code blocks
    • try: contém o código que pode gerar uma exceção
    • except: contém o código que trata a exceção
#  Montamos um bloco try-except para tratar o caso em que
#  o usuário insira algum character que não possa ser convertido em inteiro.

try:
    # Bloco de código que pode lançar uma exceção
    numero = int(input("Digite um número: "))
except ValueError:
    # Bloco executado se uma ValueError ocorrer
    print("Você não digitou um número válido.")

Tratando exceções II

  • Podemos forçar uma exceção a ocorrer
  • keyword raise
  • Por quê?
    • Barrar comportamentos indesejados dentro do código
    • Permitir um fluxo robusto de informações
    • Manutenção, Legibilidade, Previsibilidade
#  Levantando uma exceção
idade = -1

# No caso em que não queremos aceitar inteiros negativos da parte do usuário
if idade < 0:
    raise ValueError("A idade não pode ser negativa.")
ValueError: A idade não pode ser negativa.